{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to get started with Machine Learning\n",
    "<br>\n",
    "\n",
    "<img src=\"http://www.codeheroku.com/static/blog/images/pid15_ml.jpg\">\n",
    "\n",
    "\n",
    "Are you someone who is constantly trying to learn the concepts of machine learning and data science but don’t know from where to start?\n",
    "\n",
    "If your answer is “YES”, then this is the right place for you.\n",
    "\n",
    "Don’t worry, most people feel the same way as you when they first get introduced to machine learning. They have the enthusiasm to learn but, they get confused from where to start learning, which resources to follow and which prerequisites to learn at first.\n",
    "\n",
    "So, we at [Code Heroku](http://www.codeheroku.com/), felt that it’s much needed for us to write an article about getting started with machine learning so that, aspiring machine learning engineers can follow a guided path to pursue their dream :)\n",
    "\n",
    "Let’s start with the most common questions.\n",
    "\n",
    "## How much coding knowledge is required and what programming languages are best for machine learning?\n",
    "\n",
    "So, exactly how much knowledge should you have about programming?\n",
    "\n",
    "Just the basic syntax and knowledge about using libraries is enough.\n",
    "\n",
    "Why?\n",
    "\n",
    "Because, in majority of the cases, machine learning engineers don’t build their models from scratch. They would rather use some machine learning library such as Scikit Learn or TensorFlow in order to implement their models. These libraries provide well-documented high level APIs for implementing machine learning models. So, most of the hard work is already taken care by them. You just need to know how to use these libraries in order to implement your model.\n",
    "\n",
    "To answer the second part of the question, there is really no specific answer to that. While different people have different opinions over this, we still tried to compare some of the widely used programming languages for machine learning (Python, R, MATLAB) in terms of their execution speed, available libraries and ease of use.\n",
    "\n",
    "Now, let’s discuss some of the advantages and disadvantages of these languages.\n",
    "\n",
    "#### Python:\n",
    "\n",
    "<img src=\"http://www.codeheroku.com/static/blog/images/pid15_py.png\">\n",
    "\n",
    "Advantages:\n",
    "\n",
    "- Multipurpose programming language. Can be used to build actual commercial products and standalone applications.\n",
    "- A large number of Open Source Packages and libraries available for machine learning.\n",
    "- Though it is 5 times slower than C, it is still much faster than R and MATLAB in terms of execution speed.\n",
    "- Can be easily integrated with other languages.\n",
    "\n",
    "Disadvantages:\n",
    "\n",
    "- More lines of code needs to be written as compared to R or MATLAB for performing the same operation.\n",
    "\n",
    "#### R:\n",
    "\n",
    "<img src=\"http://www.codeheroku.com/static/blog/images/pid15_r.png\">\n",
    "\n",
    "Advantages:\n",
    "\n",
    "- Primarily developed for statistical computation and data analytics.\n",
    "- A large number of Open Source Packages and libraries available for machine learning.\n",
    "- Can be easily integrated with other languages such as C/C++.\n",
    "- It requires less number of codes to be written as compared to Python and MATLAB for performing the same task.\n",
    "\n",
    "Disadvantages:\n",
    "\n",
    "- Slow execution speed as compared to Python.\n",
    "- Difficult to implement interactive charts.\n",
    "- Limited capabilities while creating standalone applications.\n",
    "\n",
    "#### MATLAB:\n",
    "\n",
    "<img src=\"http://www.codeheroku.com/static/blog/images/pid15_matlab.png\">\n",
    "\n",
    "Advantages:\n",
    "\n",
    "- Fastest mathematical and computational platform specially for vectorized operations, linear algebra, matrix manipulation.\n",
    "- Best for visualization of plots and interactive charts.\n",
    "\n",
    "Disadvantages:\n",
    "\n",
    "- Slightly less number of Open Source Packages available.\n",
    "- Slow execution speed as compared to Python and R.\n",
    "- Not a good choice for implementing standalone applications.\n",
    "\n",
    "From our point of view, we would recommend you to get started with Python if you are a beginner. Because, it’s an easy-to-learn multipurpose programming language with (comparatively) fast execution speed and wide range of open source libraries available for machine learning. We, at [Code Heroku](http://www.codeheroku.com/) also use Python to teach our [Introduction to Machine Learning](http://www.codeheroku.com/course?course_id=1) course.\n",
    "\n",
    "## How much knowledge of mathematics is required?\n",
    "\n",
    "In majority of the cases, people get scared of machine learning when they get to know about the mathematics part. Because, students are not well informed about which part of mathematics to learn and how much to learn.\n",
    "\n",
    "So, here we have tried to provide you with a guided path of mathematical foundations for machine learning. Having a sound knowledge on the following topics is sufficient (but not limited to) for a machine learning engineer.\n",
    "\n",
    "- Linear Algebra\n",
    "- Analytic geometry\n",
    "- Matrix Decompositions\n",
    "- Vector Calculus\n",
    "- Probability and Distribution\n",
    "- Continuous Optimization\n",
    "\n",
    "Don’t worry, you don’t need to learn all of this at once. Here are some useful tips for getting started:\n",
    "\n",
    "- Don’t try to learn all topics at once, learn them one by one.\n",
    "- While exploring a particular topic of machine learning, try to learn maths related to that topic only.\n",
    "\n",
    "Our [Machine Learning Course](http://www.codeheroku.com/course?course_id=1) at [Code Heroku](http://www.codeheroku.com/) is designed in such a way that it explains the maths behind every algorithm in our syllabus. So, even if you are someone from a non-mathematical background, you will still be able to understand the concepts without any problem.\n",
    "\n",
    "## What syllabus to follow?\n",
    "\n",
    "We have tried to provide you with a simple yet powerful syllabus for machine learning which is sufficient (but not limited to) for a beginner. The same syllabus is being taught at our [Introduction to Machine Learning](http://www.codeheroku.com/course?course_id=1) course at [Code Heroku](http://www.codeheroku.com/).\n",
    "\n",
    "**Section 1: Introduction and Getting Started**\n",
    "\n",
    "- Introduction to Machine Learning\n",
    "- Setup Python\n",
    "- Scikit-Learn and other libraries installation\n",
    "- An introduction to Python, Numpy, SciPy and Matplotlib\n",
    "\n",
    "**Section 2: Supervised Machine Learning**\n",
    "\n",
    "- Introduction to Supervised Learning\n",
    "- Linear Regression using Scikit-Learn\n",
    "- Naive Bayes using Scikit Learn\n",
    "- Understanding Recommendation Engines\n",
    "- Understanding Gradient Descent Optimization\n",
    "\n",
    "**Section 3: Unsupervised Machine Learning**\n",
    "\n",
    "- Understanding Support Vector Machines(SVM)\n",
    "- Understanding K-Means\n",
    "- Principal Component Analysis (PCA)\n",
    "- Understanding the Application of PCA\n",
    "- Model Selection and Boosting\n",
    "\n",
    "**Section 4: Reinforcement Learning**\n",
    "\n",
    "- Introduction to Reinforcement Learning\n",
    "- Introduction to Open AI Gym\n",
    "- Deep Reinforcement Learning and Q-Learning\n",
    "- Understanding the Application of Deep Reinforcement Learning\n",
    "\n",
    "**Section 5: Neural Networks**\n",
    "\n",
    "- Introduction to Neural Networks\n",
    "- Supervised Machine Learning using Neural Networks\n",
    "- Object Recognition with Neural Networks\n",
    "\n",
    "## What project ideas to follow?\n",
    "\n",
    "While learning the theory is important, it is more important to apply that knowledge and build something useful out of it. Implementing projects while learning will give you hands-on experience on the things that you will learn. We at [Code Heroku](http://www.codeheroku.com/) implement the following projects in our [Introduction to Machine Learning](http://www.codeheroku.com/course?course_id=1) course and would recommend you to try to implement the same.\n",
    "\n",
    "Supervised Machine Learning Projects:\n",
    "\n",
    "- [Student Exam Score Prediction System](http://www.codeheroku.com/course_content?lesson_id=0&course_id=1&section_id=1)\n",
    "- Email Classifier System (Spam Detection System)\n",
    "- [Movie Recommendation System](https://medium.com/code-heroku/building-a-movie-recommendation-engine-in-python-using-scikit-learn-c7489d7cb145)\n",
    "\n",
    "Unsupervised Machine Learning Projects:\n",
    "\n",
    "- [Digit Recognition System](http://www.codeheroku.com/course_content?lesson_id=0&course_id=1&section_id=2)\n",
    "- [Face Recognition System](http://www.codeheroku.com/course_content?lesson_id=3&course_id=1&section_id=2)\n",
    "\n",
    "Reinforcement Learning Projects:\n",
    "\n",
    "- Solving Mouse Cat Maze\n",
    "- Cartpole Balancing with Q Learning\n",
    "\n",
    "Neural Network Projects:\n",
    "\n",
    "- Object Recognition with Neural Networks\n",
    "\n",
    "Apart from the list above, you can also try to implement tons of other cool projects on your own. You can get some good project ideas from [ml-showcase.com](https://ml-showcase.com/) and try to implement them on your own.\n",
    "\n",
    "## What learning strategy to follow?\n",
    "\n",
    "Most people are left out in the learning process because they do not follow a learning strategy. Though this thing depends from person to person according to their own preferences, we still tried to give you a generalized view over the learning process.\n",
    "\n",
    "- When you try to learn a topic related to machine learning, try to understand the theory behind it.\n",
    "- Once you have learned the theory, apply this knowledge to make a small project out of it.\n",
    "- Once you have explored enough topics, try to compare their performance while implementing the same project. For example, try to implement spam detection system using both [Naive Bayes](http://www.codeheroku.com/course_content?lesson_id=1&course_id=1&section_id=1) and [SVM](http://www.codeheroku.com/course_content?lesson_id=0&course_id=1&section_id=2) and then compare the results.\n",
    "- This will give you a better idea to understand which algorithm to use in which scenario.\n",
    "\n",
    "Apart from this, try to manage your time effectively and learn the topics one by one. Do not rush to learn everything at once.\n",
    "\n",
    "\n",
    "Follow our [Medium Publication](https://medium.com/code-heroku) to get regular updates on these kind of posts.\n",
    "\n",
    ">If this article was helpful to you, check out our [Introduction to Machine Learning](http://www.codeheroku.com/course?course_id=1) Course at [Code Heroku](http://www.codeheroku.com/) for a complete guide to Machine Learning.\n",
    "\n",
    "<br><br>\n",
    "<p align=\"center\"><a href=\"http://www.codeheroku.com/\">\n",
    " <img src=\"http://www.codeheroku.com/static/images/logo5.png\"></a>\n",
    "</p>\n",
    "\n",
    "<br>"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
